package prueba;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author tlamatron
 */
public class Puente {

    private int limite=3; //Total de autos
    private int autos = 0; // número de autos atravesando el puente
    private int direccion=0; // 0-sur a norte, 1-norte a sur
    private boolean entra=true; //Llega al puente y pasa
    Lienzo l;
    Carro[] a;

    public Puente(){
        limite=3;
    }

    public void setLienzo(Lienzo lien){
    	l=lien;
    }

    public void setAutos( Carro[] arr ){
    	a = arr;
    }

    //llega al puente
    synchronized void llegar(String dir, int idA, int dirN){
        try{  //Lo dormimos un momento para ver
            Thread.sleep(2000);
        }catch(InterruptedException e){}

    	System.out.println("Auto: "+idA+" llego al puente va de: "+dir);
        while(entra==true){
    	   if( autos==0 )  //si no hay coches entrar
    	   {
    	      System.out.println("Auto: "+idA+" entro al puente va de: "+dir);
    	      direccion=dirN;
              autos++;
              return;
    	   }
           else
    	   {
               if( autos < limite ) //si hay menos de 3 coches entrar solo si van en la misma dir
    	       {
    	            if( dirN==direccion )
    		    {
    		         System.out.println("Auto: "+idA+" entro al puente va de: "+dir);
    		 	 autos++;
                         return;
    		    }
    		    System.out.println("Auto: "+idA+" esta esperando va de: "+dir); //si no van en la misma dir espera
    		    try{
                        wait();
                    }catch(InterruptedException e){}
    		 }

//    		 System.out.println("Auto: "+idA+" esta esperando va de: "+dir); //si ya hay 3 autos espera
    		 try{
                     wait();
                 }catch(InterruptedException e){}

    	    }//fin del esle
        }
    }
    
    
    //inicio pasar()
    void pasar(int id, int d)
    {
	try{ //Nos detenemos un momento para ver el movimiento
            Thread.sleep( (int)(Math.random()*1000) );
        }catch(InterruptedException e){}

	if( d == 0 ){ //En caso de que venga de sur a norte
	   while( a[id].x+50 <= 400 ){
	      a[id].x = a[id].x + 11;
	      l.repaint();  //Quita lo que haya escrito
	      try{Thread.sleep(100);}
	      catch(InterruptedException e){}
	    }
	}

	else{ // En caso de que venga de norte a sur
	    while( a[id].x >=10 ){
		a[id].x = a[id].x - 11;
	        l.repaint();
		try{Thread.sleep(100);}
	        catch(InterruptedException e){}
	    }
        }
    }//fin pasar()


    //Salida del puente
    synchronized void salir( int idA, String dir)
    {

    	System.out.println("Auto: "+idA+" salio del puente venia de: "+dir);
    	autos--;
    	notifyAll();
    }
}
